package menu

import (
	"NetTools/impl"
	"fmt"
	"os"
	"os/exec"
	"runtime"
)

// clearScreen 清屏函数
func clearScreen() {
	var cmd *exec.Cmd
	if runtime.GOOS == "windows" {
		cmd = exec.Command("cmd", "/c", "cls")
	} else {
		cmd = exec.Command("clear")
	}
	cmd.Stdout = os.Stdout
	cmd.Run()
}

// ShowMenu 显示主菜单
func ShowMenu() {
	clearScreen()
	fmt.Println("\n=== 主菜单 ===")
	fmt.Println("1. 禁用网卡")
	fmt.Println("2. 启用网卡")
	fmt.Println("3. 自动获取IP")
	fmt.Println("4. 手动设置IP")
	fmt.Println("5. 查看在线设备")
	fmt.Println("6. 端口扫描")
	fmt.Println("0. 退出")
	fmt.Print("请选择操作: ")
}

// HandleInput 处理用户输入
func HandleInput(choice int) {
	var iface string
	var ip, mask, gateway string
	var startPort, endPort int

	switch choice {
	case 1:
		fmt.Print("请输入要禁用的网卡名称: ")
		fmt.Scan(&iface)
		if err := impl.DisableNIC(iface); err != nil {
			fmt.Println("禁用网卡失败:", err)
		}
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	case 2:
		fmt.Print("请输入要启用的网卡名称: ")
		fmt.Scan(&iface)
		if err := impl.EnableNIC(iface); err != nil {
			fmt.Println("启用网卡失败:", err)
		}
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	case 3:
		fmt.Print("请输入要自动获取IP的网卡名称: ")
		fmt.Scan(&iface)
		if err := impl.AutoGetIP(iface); err != nil {
			fmt.Println("自动获取IP失败:", err)
		}
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	case 4:
		fmt.Print("请输入要设置的网卡名称: ")
		fmt.Scan(&iface)
		fmt.Print("请输入IP地址: ")
		fmt.Scan(&ip)
		fmt.Print("请输入子网掩码: ")
		fmt.Scan(&mask)
		fmt.Print("请输入网关: ")
		fmt.Scan(&gateway)
		if err := impl.ManualSetIP(iface, ip, mask, gateway); err != nil {
			fmt.Println("手动设置IP失败:", err)
		}
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	case 5:
		if err := impl.ScanOnlineDevices(); err != nil {
			fmt.Println("扫描在线设备失败:", err)
		}
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	case 6:
		fmt.Print("请输入要扫描的IP地址: ")
		fmt.Scan(&ip)
		fmt.Print("请输入起始端口: ")
		fmt.Scan(&startPort)
		fmt.Print("请输入结束端口: ")
		fmt.Scan(&endPort)
		if err := impl.PortScan(ip, startPort, endPort); err != nil {
			fmt.Println("端口扫描失败:", err)
		}
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	case 0:
		fmt.Println("退出程序")
		os.Exit(0)
	default:
		fmt.Println("无效选择，请重新输入")
		fmt.Print("\n按回车键继续...")
		fmt.Scanln()
	}
}
